package cn.itcast.nems.order.dto;

import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

/**
 * 优惠单相关信息
 *
 * @author ChangLu.Gao
 * @version v1.0
 * @program nems-server
 * @description
 * @date 2023/12/08 11:07
 */
@Data
public class JournalDiscountDTO {
    /**
     * 优惠凭单ID
     */
    private String id;
    /**
     * 业务实际办理日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime bizDate;
    /**
     * 优惠规则ID;原EMS管理
     */
    private String discountId;
    /**
     * 优惠规则名称;原EMS管理
     */
    private String discountName;
    /**
     * 优惠券类型;原EMS管理的；枚举值：金额|CASH、折扣|DISCOUNT。注：来自于优惠规则的类型
     */
    private String discountType;
    /**
     * 优惠券类型描述
     */
    private String discountTypeDesc;
    /**
     * 优惠金额或折扣
     */
    private BigDecimal discountValue;
    /**
     * 业务线
     */
    private String businessLineId;
    /**
     * 业务线名称
     */
    private String businessLineName;
    /**
     * 申请人数
     */
    private Integer quantity;
    /**
     * 状态;枚举值：草稿｜DRAFT、待审批｜PENDING、审批中｜APPROVING、审批未通过｜REJECTED、已完成｜FINISHED
     */
    private String state;
    /**
     * 状态描述
     */
    private String stateDesc;
    /**
     * 备注
     */
    private String remark;
    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createdDatetime;
    /**
     * 创建人邮箱
     */
    private String createdBy;
    /**
     * 创建人姓名
     */
    private String createdByName;
    /**
     * e2_approval_form表ID
     */
    private String formId;
    /**
     * 班级开课起始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime clazzBeginDate;
    /**
     * 班级开课结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime clazzEndDate;
    /**
     * 交费开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime feeBeginDate;
    /**
     * 交费结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime feeEndDate;
    /**
     * 适用的班级类型范围: jsonArray格式
     */
    private JSONArray applyClazzType;
    /**
     * 优惠单行数据集合
     */
    private List<JournalDiscountLineDTO> lineList;
    /**
     * category：1：审批）2：知会）
     */
    private Integer category ;

    /**
     * 员工姓名
     */
    private String employeeName;
    /**
     * 校区ID
     */
    private String employeeCampusId;
    /**
     * 校区名称
     */
    private String employeeCampusName ;
    /**
     * 员工入职日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate employeeEntryDate;
    /**
     * 亲属关系
     */
    private String employeeKinship;

    /**
     * 优惠单行数据
     */
    @Data
    public static class JournalDiscountLineDTO {
        /**
         * 优惠单行ID
         */
        private String id;
        /**
         * 客户/学员姓名
         */
        private String name;
        /**
         * 脱敏手机号
         */
        private String mobile;
        /**
         * 客户ID(SCRM中台ID)
         */
        private String customerId;
        /**
         * 学员ID
         */
        private Integer studentId;
        /**
         * 学号
         */
        private String studentNo;
        /**
         * 性别
         */
        private String gender;

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            JournalDiscountLineDTO that = (JournalDiscountLineDTO) o;
            return Objects.equals(id, that.id) || Objects.equals(customerId, that.customerId) || Objects.equals(studentId, that.studentId);
        }

        @Override
        public int hashCode() {
            return Objects.hash(id, customerId, studentId);
        }
    }
}
